package ge.testes;

import junit.framework.Assert;
import ge.escola.Disciplina;
import ge.escola.Laboratorio;
import ge.util.Horario;

import org.junit.Before;
import org.junit.Test;

public class LaboratorioTest {

	private Laboratorio lab;

	@Before
	public void setUp() throws Exception {
		lab = new Laboratorio("Lcc2", 10, 10);
	}

	@Test
	public void testConstructor() {
		try {
			lab = new Laboratorio("", 10, 10);
		} catch (Exception ex) {
			Assert.assertEquals("Nome invalido",
					"Nome do laboratorio invalido !", ex.getMessage());
		}

		try {
			lab = new Laboratorio("        ", 10, 10);
		} catch (Exception ex) {
			Assert.assertEquals("Nome invalido",
					"Nome do laboratorio invalido !", ex.getMessage());
		}

		try {
			lab = new Laboratorio("lcc2", -2, 10);
		} catch (Exception ex) {
			Assert.assertEquals("Numero invalido",
					"Numero de computadores no laboratorio invalido !",
					ex.getMessage());
		}

		try {
			lab = new Laboratorio("lcc2", 10, -4);
		} catch (Exception ex) {
			Assert.assertEquals("Numero invalido",
					"Capacidade de alunos no laboratorio invalida !",
					ex.getMessage());
		}
		
		try {
			lab = new Laboratorio("lcc2", 10, 20,"10:30","24:01");
		} catch (Exception ex) {
			Assert.assertEquals("Hora invalida",
					"Horario de funcionamento invalido !",
					ex.getMessage());
		}

	}

	@Test
	public void testGet() throws Exception{
		Assert.assertEquals(10, lab.getCapacidadeDeAlunos());
		Assert.assertEquals(10, lab.getNumeroDeComputadores());
		Assert.assertEquals("Lcc2", lab.getNomeDoLaboratorio());
		
		lab = new Laboratorio("lcc2", 10, 20,"10:30","17:30");
		Assert.assertEquals("10:30", lab.getHorarioDeFuncionamentoInicial());
		Assert.assertEquals("17:30", lab.getHorarioDeFuncionamentoFinal());
	}

	@Test
	public void testSets() throws Exception {
		lab.setCapacidadeDeAlunos(20);
		try{
			lab.setCapacidadeDeAlunos(-20);	
		}catch(Exception e){
			Assert.assertEquals("Numero invalido !", e.getMessage());
		}
		Assert.assertEquals(20, lab.getCapacidadeDeAlunos());
		lab.setNomeDoLaboratorio("Lcc3");
		Assert.assertEquals("Lcc3", lab.getNomeDoLaboratorio());
		lab.setNumeroDeComputadores(35);
		try{
			lab.setNumeroDeComputadores(-7);	
		}catch(Exception e){
			Assert.assertEquals("Numero invalido !", e.getMessage());
		}
		Assert.assertEquals(35, lab.getNumeroDeComputadores());
		
		
		lab = new Laboratorio("lcc2", 10, 20,"10:30","17:30");
		try{
			lab.setHorarioDeFuncionamentoInicial("");	
		}catch(Exception e){
			Assert.assertEquals("Horario invalido !", e.getMessage());
		}
		
		try{
			lab.setHorarioDeFuncionamentoFinal("00000");	
		}catch(Exception e){
			Assert.assertEquals("Horario invalido !", e.getMessage());
		}

	}

	@Test
	public void testToString() {
		Assert.assertEquals(
				"Nome do laboratorio: Lcc2\nHorario de funcionamento: null - null\nNumero de computadores: 10\nCapacidade de alunos: 10",
				lab.toString());
	}

	@Test
	public void testEquals() throws Exception {
		Laboratorio lab2 = new Laboratorio("Lcc2", 10, 10);
		Assert.assertTrue(lab.equals(lab2));
		
		Assert.assertFalse(lab.equals("Arroz"));

	}

}
